package com.lyl.mysqlmonitor.callback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 回调管理器
 * 用于集中管理所有回调相关的操作
 */
public class CallbackManager {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(CallbackManager.class);
    
    private final IndexAnalysisCallback callback;
    
    /**
     * 构造函数
     * 
     * @param callback 索引分析回调接口的实现
     */
    public CallbackManager(IndexAnalysisCallback callback) {
        this.callback = callback;
    }
    
    /**
     * 调用分析开始的回调
     * 
     * @param sql 要分析的SQL
     */
    public void notifyAnalysisStart(String sql) {
        if (callback == null) {
            return;
        }
        
        try {
            callback.onAnalysisStart(sql);
        } catch (Exception e) {
            LOGGER.error("调用回调接口的onAnalysisStart方法时出错: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 调用分析完成的回调
     * 
     * @param sql 原始SQL
     * @param result 分析结果
     * @param isJson 是否为JSON格式
     */
    public void notifyAnalysisComplete(String sql, String result, boolean isJson) {
        if (callback == null) {
            return;
        }
        
        try {
            callback.onAnalysisComplete(sql, result, isJson);
        } catch (Exception e) {
            LOGGER.error("调用回调接口的onAnalysisComplete方法时出错: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 调用分析错误的回调
     * 
     * @param sql 原始SQL
     * @param errorMessage 错误信息
     * @param e 异常对象
     */
    public void notifyAnalysisError(String sql, String errorMessage, Throwable e) {
        if (callback == null) {
            return;
        }
        
        try {
            callback.onAnalysisError(sql, errorMessage, e);
        } catch (Exception callbackEx) {
            LOGGER.error("调用回调接口的onAnalysisError方法时出错: {}", callbackEx.getMessage(), callbackEx);
        }
    }
    
    /**
     * 判断是否设置了回调
     * 
     * @return 如果设置了回调返回true，否则返回false
     */
    public boolean hasCallback() {
        return callback != null;
    }
} 